package pe.com.ValoracionVivienda.domain.entities;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "Arquitectura_RNA")
public class ArquitecturaRNA implements Serializable {
	private static final long serialVersionUID = 1L;
    
    private Integer id;
    private String nombre;
    private String capaOculta;
    private float learningRate;
    private float momentum;
    private int trainingTime;
    private boolean estado;
    private Date fechaCreacion;
    private Date fechaModificacion;
    private Usuario usuarioCreacion;
    private Usuario usuarioModificacion;
    
    public ArquitecturaRNA() {
    }
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "Id_Arquitectura_RNA")
    public Integer getId() {
        return id;
    }

    public void setId(Integer idArquitecturaRNA) {
        this.id = idArquitecturaRNA;
    }

    @Basic(optional = false)
    @Column(name = "Nombre")
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    @Basic(optional = false)
    @Column(name = "Capa_Oculta")
    public String getCapaOculta() {
        return capaOculta;
    }

    public void setCapaOculta(String capaOculta) {
        this.capaOculta = capaOculta;
    }

    @Basic(optional = false)
    @Column(name = "Learning_Rate")
    public float getLearningRate() {
        return learningRate;
    }

    public void setLearningRate(float learningRate) {
        this.learningRate = learningRate;
    }

    @Basic(optional = false)
    @Column(name = "Momentum")
    public float getMomentum() {
        return momentum;
    }

    public void setMomentum(float momentum) {
        this.momentum = momentum;
    }

    @Basic(optional = false)
    @Column(name = "Training_Time")
    public int getTrainingTime() {
        return trainingTime;
    }

    public void setTrainingTime(int trainingTime) {
        this.trainingTime = trainingTime;
    }

    @Basic(optional = false)
    @Column(name = "Estado")
    public boolean getEstado() {
        return estado;
    }

    public void setEstado(boolean estado) {
        this.estado = estado;
    }
    
    @Basic(optional = false)
    @Column(name = "Fecha_Creacion")
    @Temporal(TemporalType.TIMESTAMP)
    public Date getFechaCreacion() {
        return fechaCreacion;
    }

    public void setFechaCreacion(Date fechaCreacion) {
        this.fechaCreacion = fechaCreacion;
    }

    @Column(name = "Fecha_Modificacion")
    @Temporal(TemporalType.TIMESTAMP)
    public Date getFechaModificacion() {
        return fechaModificacion;
    }

    public void setFechaModificacion(Date fechaModificacion) {
        this.fechaModificacion = fechaModificacion;
    }
    
    @JoinColumn(name = "Id_Usuario_Creacion", referencedColumnName = "Id_Usuario")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    public Usuario getUsuarioCreacion() {
        return usuarioCreacion;
    }

    public void setUsuarioCreacion(Usuario usuarioCreacion) {
        this.usuarioCreacion = usuarioCreacion;
    }

    @JoinColumn(name = "Id_Usuario_Modificacion", referencedColumnName = "Id_Usuario")
    @ManyToOne(fetch = FetchType.LAZY)
    public Usuario getUsuarioModificacion() {
        return usuarioModificacion;
    }

    public void setUsuarioModificacion(Usuario usuarioModificacion) {
        this.usuarioModificacion = usuarioModificacion;
    }
}
